import { dayjs } from 'element-plus';
import solarlunar from 'solarlunar';

const formatter = {
	excelDate: (excelDate, format = 'YYYY/MM/DD') => {
		// Excel日期从1900年1月1日开始
		// 考虑Excel错误，将1900年2月29日之前的天数减去1
		var daysBefore1900 = excelDate - 1;

		// 计算标准日期
		var standardStartDate = new Date(1900, 0, 1); // 1900年1月1日
		var standardDate = new Date(
			standardStartDate.getTime() + daysBefore1900 * 24 * 60 * 60 * 1000
		);

		return dayjs(standardDate).format(format);
	},
	toExcelDate: (date) => {
		// 将标准日期转为excel日期

		var dd = dayjs(date);
		var year = dd.year(),
			month = dd.month(),
			date = dd.date();
		var start = new Date(1900, 0, 1); // 1900年1月1日
		var end = new Date(year, month, date);
		var days = (
			(end.getTime() - start.getTime()) / (24 * 60 * 60 * 1000) +
			2
		).toFixed(0);

		return days;
	},
	solarLunarDate: (excelDate) => {
		// Excel日期从1900年1月1日开始
		// 考虑Excel错误，将1900年2月29日之前的天数减去1
		var daysBefore1900 = excelDate - 1;

		// 计算标准日期
		var standardStartDate = new Date(1900, 0, 1); // 1900年1月1日
		var standardDate = new Date(
			standardStartDate.getTime() + daysBefore1900 * 24 * 60 * 60 * 1000
		);
		var dayjsValue = dayjs(standardDate);

		var year = dayjsValue.get('year'),
			month = dayjsValue.get('month'),
			date = dayjsValue.get('date');

		var solarData = solarlunar.solar2lunar(year, month + 1, date);
		return `${solarData.monthCn}${solarData.dayCn}`;
	},
	valueToText: (num, isPercent, decimal) => {
		if (Number.isNaN(num)) return '(无数据)';
		num = Number(num);
		decimal = typeof decimal === 'number' ? decimal : num % 1 === 0 ? 0 : 2;
		return isPercent
			? (num * 100).toFixed(decimal) + '%'
			: num.toFixed(decimal);
	},
	valueToWan: (v, decimal) => {
		v = v / 10000;
		decimal = decimal || v % 1 === 0 ? 0 : 2;
		return v.toFixed(decimal) + '万';
	},
	getKpiColor: (element, value) => {
		const { baseTarget, challengeTarget, isMinBetter } = element;
		let color = 'black';
		if (isMinBetter) {
			if (baseTarget && value > baseTarget) {
				color = 'red';
			} else if (challengeTarget && value > challengeTarget) {
				color = 'orange';
			}
		} else {
			if (baseTarget && value < baseTarget) {
				color = 'red';
			} else if (challengeTarget && value < challengeTarget) {
				color = 'orange';
			}
		}
		return color;
	},
};
window.formatter = formatter;
export default formatter;
